package thread;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: wx
 * Date: 2024-01-24
 * Time: 9:25
 */


import java.util.concurrent.*;

/**
 * 池 非常重要的概念
 * 常量池                                          1.提前把要用的对象准备好
 * 数据库连接池                                     2.用完的对象也不要立即释放,留着以备下次使用
 * 线程池                                          为了 提高效率
 * 进程池
 * 内存池
 * ......
 *
 * 最开始 进程,能够解决 并发编程 问题
 * 因为 频繁创建销毁进程,成本太高了,引入了 轻量级 进程 => 线程
 *
 * 就需要想办法优化此处的线程的创建销毁效率
 * 解决方案有两种
 * 1.引入 轻量级 线程 => 纤程/协程
 * 2.线程池.把要使用的线程提前创建好,用完了也留着以备下次释放.就节省了创建/销毁线程的开效
 *
 * ThreadPoolExecutor 本身用起来比较复杂
 * 因此标准库还提供了另一个版本,把ThreadPoolExecutor给封装了一下
 * Executor 工厂类.通过这个类来创建出不同的线程池对象(在内部把ThreadPollExecutor 创建好并且设置不同的参数)
 *
 * 啥时候使用 Executor?    啥时候使用 ThreadPoolExecutor?
 *       (只是简单用一下)             (希望高度定制化)
 *
 *       由于程序的复杂性,很难直接对于线程池的线程数量进行估算
 *       更合适的做法,通过实验/测试的方法找到合适的线程数目
 *
 */
public class ThreadDemo31 {
    public void ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit,
                                   //   核心线程数             最大线程数           存活时间               时间单位
                                   BlockingQueue<Runnable> workQueue, ThreadFactory threadFactory){
                                   //                                                   线程工厂

    }
    public static void main(String[] args) {
        Executors.newCachedThreadPool();//只包含一个线程的线程池
        Executors.newScheduledThreadPool(111);//类似定时器,也能延时执行任务
        Executors.newCachedThreadPool();//线程数目可以动态扩容
        Executors.newFixedThreadPool(111);//线程数目固定


        ExecutorService service = Executors.newFixedThreadPool(4);
        service.submit(new Runnable() {
            @Override
            public void run() {
                System.out.println("hello");
            }
        });


    }
}
